<?php
/*
ARTICLE.INC.PHP by martin $ 2009/03/05 22:22:35
*/

checkADMIN();

$DIVISION['style'] .= ' <link rel="stylesheet" href="css/page-nav.css" type="text/css" />';

$header = $body = '';

$sub = v_('sub');

if(($tar = p_('del')) != ''){
 foreach($tar as $tid){
  catch_data(0,'','','','','','',0,0,'', $tid);
 }
 update_cache(array('recently', 'recent_comments', 'recent_trackbacks', 'category', 'articles_volume', 'tags'));
 showMessage('選択した記事を削除しました。すぐにページを更新します');
 refresh_page('admin.php?'.p_('query'), 2000);
 return;
}

$helperState = isset($_COOKIE['PPBLOG_HELPER_STATE']) ? $_COOKIE['PPBLOG_HELPER_STATE'] : 1;

$back = NL.'<p style="margin:1em;text-align:center;"><img src="Images/back1.png" alt="Back"
    onmouseover="this.src=\'Images/back2.png\';" onclick="history.back(-1);"
    onmouseout="this.src=\'Images/back1.png\'" title="前の画面に戻る" /></p>'.NL;

$DIVISION['script'] .= '
<style type="text/css">
 p#reset {text-align: right; width: 95%;}
 button { font-size: 10px; }
</style>
<script type="text/javascript">
 o(d).on("click", function(){
  var tar = oParts.evt.target;
  if(tar.nodeName.toLowerCase() == "input" && tar.type.toLowerCase() == "checkbox"){
   var tr = tar.parentNode.parentNode, trs = tr.style;
   if(tar.checked == false){
    trs.backgroundColor = (tr.rowIndex % 2 == 0) ? "#eff1f3" : "#fff";
   } else trs.backgroundColor = "highlight";
   if(oParts.evt.shiftKey){
    var i = tr.rowIndex - 2, item, cb = o("td > input[type=checkbox]");
    for(i; i > 0; i--){
     item = cb.item(i).$;
     if(item.checked == true) break;
     item.checked = true;     
     item.parentNode.parentNode.style.backgroundColor = "highlight";
    }
   }
  }
 });
 function resetAll(){
  var cb = d.getElementsByTagName("INPUT");
  for (var i = 0, l = cb.length; i < l; i++){
   if(cb[i].type.toLowerCase() == "checkbox"){
    cb[i].checked = false;
    cb[i].parentNode.parentNode.style.backgroundColor = (i % 2 == 0) ? "#fff" : "#eff1f3";
   }
  }
  return false;
 }
</script>
';

# article.inc.php での表示件数
if(g_('pitch')!='') setcookie('PPBLOG_PITCH_ARTICLE', g_('pitch'), time()+30*24*3600);

$pitch= g_('pitch')=='' ?
 (empty($_COOKIE['PPBLOG_PITCH_ARTICLE'])?15:$_COOKIE['PPBLOG_PITCH_ARTICLE']) : g_('pitch');
$page = g_('page')=='' ? 1 : g_('page');
$offset = $pitch * ($page-1);

$total = 0;

if($sub == 'category'){
 $cat = trans_cat(g_('aim'), FALSE);
 $LINES = get_articles_by_category($cat);
 $total = sizeof($LINES);
 if(g_('author') != ''){
  $author = rawurldecode(g_('author'));
  $LINES = preg_grep('{^\d+?d?\|[^|]+?\|[^|]+?\|[^|]+?\|'.$author.'\|}', $LINES);
 } else $author = $SESSION->owner();
 $LINES = array_slice($LINES, $offset, $pitch);
 if(isUserLoggedIn()){
  $LINES = get_articles_by_author($SESSION->owner(), $offset, $pitch);
 }
} else {
 $author = g_('sub')=='author' ? rawurldecode(g_('aim')) : $SESSION->owner();
 if(g_('sub')=='author'){
  $LINES = get_articles_by_author($author, $offset, $pitch);
 } else $LINES = get_sliced_articles($offset, $pitch);

 if(isUserLoggedIn()){
  $LINES = get_articles_by_author($SESSION->owner(), $offset, $pitch);
 }
 if(g_('sub')=='author'){
  for($j = 0, $l = count($LOGS); $j < $l; $j++){ // トータルのauthor記事数ゲット
   if(!is_file($LOGS[$j])) continue;
   if($fp = @fopen($LOGS[$j], "rb")){
    while(!feof($fp)){
     $line = fgets($fp, 4096);
     if(trim($line)!=''){
      if(strpos($line, "|$author|")) $total++;
     }
    } # while-loop
    fclose($fp);
   } # $fp
  } # for-loop 
 } else {
  $total = $_cache['total_articles_count'];
  $total = $total['real'];
 }
}

$pages = ceil($total / $pitch);
$pageBlock = ceil($page / 10);

# Page Navigation

$pageNav = '<table cellspacing="0" cellpadding="0" class="page-nav" style="width: auto; margin: 1em auto 0.5em auto;"><tr>';
$qs = QUERY=='' ? 'mode=article' : QUERY;
$qs = preg_replace('{(?:&amp;|&)page=[0-9]+}', '', $qs).'&amp;page=';

if($page > 1){
 $pageNav .= '<td class="avant">&nbsp;</td><td class="centre"><a href="admin.php?'.$qs.($page-1).'">Prev</a></td><td class="apres">&nbsp;</td>';
}
for ($i=($pageBlock-1) * 10 + 1; $i <= $pages; $i++){
 if($i==$page){
  $pageNav .= '<td class="current" style="font-weight:800;">'.$i.'</td>';
 } else {
  $pageNav .= '<td class="link"><a href="admin.php?'.$qs.$i.'">'.$i.'</a></td>';
 }
 if($i%10==0) break;
}
if($page < $pages){
 $pageNav .= '<td class="avant">&nbsp;</td><td class="centre"><a href="admin.php?'.$qs.($page+1).'">Next</a></td><td class="apres">&nbsp;</td>';
}

if($pages > 10 && ($pages-$pageBlock*10) > 0 ){
 $pageNav .= '<td class="avant">&nbsp;</td><td class="centre"><a href="admin.php?'.$qs.($pageBlock*10+1).'">
 '.($pB=$pageBlock*10+1).'-'.($pages > $pB+9 ? $pB+9 : $pB+$pages%10-1).' of '
 .($pages).' pages</a></td><td class="apres">&nbsp;</td>';
}

$pageNav .= '</tr></table>'.NL;
if($pages==1) $pageNav = '';
$pitch_select = '<form method="get" action="admin.php?mode=article" style="display:inline;">
<select name="pitch" id="pitch" onchange="location=\'admin.php?mode=article&amp;pitch=\'+this.value;this.blur();">
<option value="15"'.($pitch==15?' selected="selected"':'').'>15　</option>
<option value="30"'.($pitch==30?' selected="selected"':'').'>30　</option>
<option value="45"'.($pitch==45?' selected="selected"':'').'>45　</option>
</select></form>
';

if(($targets = p_('del_comments')) != ''){
 $UID = p_('UID');
 $d = opendir (CMT_DIR);
 while ($file = readdir ($d)) {
  if(strstr($file, $UID)) $target = CMT_DIR.$file; 
 }
 closedir ($d);
 if(isset($target)){
  $_LINES = array();
  $LINES = file($target);
  foreach ($targets as $index){
   array_splice($LINES, $index, 1, NL);
  }
  foreach ($LINES as $line){
   if(trim($line) == '') continue;
   $_LINES[] = $line;
  }
  list($uid,$category,$title,) = explode('|', $_LINES[0]);
  $total = sizeof($_LINES) - 1;
  $nondisc = array();
  foreach ($_LINES as $line){
   if(preg_match('{\|1\|$}', rtrim($line))) $nondisc[] = $line;
  }
  $nondisc = sizeof($nondisc);
  $_LINES[0] = "$uid|$category|$title|$total|$nondisc";
  if(empty($_LINES) || $total==0){
   unlink($target);
  } else rewrite($target, $_LINES);
  update_cache(array('recent_comments'));
  showMessage('選択したコメントを削除しました。すぐにページを更新します');
  refresh_page('admin.php?mode=article&sub=comment&UID='.$UID, 2000);
 } #isset
 unset($LINES, $_LINES);
 return $DIVISION['body'] .= $header.$body;
}

if(g_('sub')=='comment'){
 $comments = get_cmt_array(g_('UID'));
 if(sizeof($comments)==0) _header('admin.php?mode=article');
 list($uid, $cat, $title) = explode('|', $comments[0]); // 親記事情報
 if(strpos($title, ',')) list($title,) = explode(',', $title);
 $body = '
<h3 class="corner-play tinyheader" style="width: 580px; margin-top: 1em; color:#667;">エントリー: <a href="index.php?UID='.g_('UID').'">'.$title.'</a> に対する'.(count($comments)-1).' 個のコメント一覧</h3>
<ul class="p2em" style="width: 450px; margin: auto; display:'.($helperState?'block':'none').';">
 <li>日付をクリックするとブロッグ上でのコメントリンクにジャンプします</li>
 <li>IPアドレスをクリックすることでそのIPを投稿禁止リストに追加できます</li>
 <li>右側の編集アイコンをクリックすると、コメントの直接編集画面が開きます</li>
 <li>SHIFTキーを押しながら、削除のチェックボックスをクリックすると一度に複数選択できます</li>
</ul><p class="helper" onclick="toggleHelper(this);" title="説明を閉じる">　</p>
<form action="admin.php" method="post" id="articleCloseUp" name="articleCloseUp">
<div class="hidden">
 <input type="hidden" name="mode" value="article" />
 <input type="hidden" name="UID" value="'.g_('UID').'" />
</div>
<table cellspacing="0" cellpadding="1" style="width:90%; margin: auto; border: solid 1px #777;">
 <tr class="header"><th>日　時</th><th>投稿者</th><th>IPアドレス</th><th>URL</th><th>　</th><th>コメント(出だし抜粋)</th><th>編集</th><th>削除</th></tr>
';
 foreach ($comments as $i => $c){
  if($i==0) continue;
  list($cid, $name, ,$com, $ip, $url, $mail) = explode('|', $c);
  $bg = ($i%2==0) ? '#eff1f3' : '#fff';
  $name = trim($mail)!='' ? '<a href="mailto:'.my_decrypt(trim($mail)).'">'.$name.'</a>' : $name;
  $url = trim($url)!='' ? '<a href="'.$url.'" onclick="window.open(this.href,\'\');return false;"><img src="Images/home.png" alt="url" title="新しいウィンドウで開きます" /></a>' : '&mdash;';
  $body .= '<tr style="background:'.$bg.';"><td><a href="index.php?UID='.$uid.'#CID'.$cid.'">'.date('Y/m/d', $cid).'</a></td><td style="text-align:center;">'.$name.'</td><td><a href="admin.php?mode=ban&amp;IP='.$ip.'" onclick="return my_confirm(\'このIPを制限リストに追加しますか？\',1);">'.($ip==0?'':$ip).'</a></td><td style="text-align:center;">'.$url.'</td><td>　</td><td style="color:#777; text-align: left;">'.my_substr(str_replace(array('<br />','`'),'',$com),0,25).'</td><td><a href="admin.php?mode=edit_comment&amp;UID='.$uid.'&amp;CID='.$cid.'"><img src="Images/edit-comment.png" alt="Edit" title="編集" style="vertical-align: middle;" /></a></td><td style="text-align:center;"><input type="checkbox" name="del_comments[]" value="'.$i.'" /></td></tr>'.NL;
 }
 $body .= '</table>'.NL;
 $body .= '<p id="reset">
  <button type="button" onclick="resetAll();">選択解除</button>
  <button type="submit" onclick="return my_confirm(\'選択したコメントを\');">削除の実行</button>
 </p>'.NL.'</form></div>'.NL;
 return $DIVISION['body'] .= $header.$body.$back;
}


if(g_('sub')=='trackback'){
 $uid = g_('UID');
 $data = unserialize(get_file_content(TB_DIR.$uid.EXT));
 if(empty($data)) _header('admin.php?mode=article');
 $target = my_file(log_($uid));
 list(,,$etitle,) = explode('|', $target[get_article_index($uid, $target)]);
 if(strpos($etitle, ',')) list($etitle,) = explode(',', $etitle);
 $body = '
<h3 class="corner-play tinyheader" style="width: 580px;margin-top: 1em; color:#667;">エントリー: <a href="index.php?UID='.$uid.'">'.$etitle.'</a> に対する'.count($data).' 件のトラックバック一覧</h4>
<table cellspacing="0" cellpadding="1" style="width: 90%; margin: 1em auto; border: solid 1px #333;">
 <tr style="text-align:center;background:url(Images/grad.png);"><th>日　時</th><th>相手ブログの記事タイトル</th><th>書き出し</th><th>相手ブログ名</th><th> 削 除 </th></tr>
';
 foreach ($data as $i=>$tb){
  $blog_name = !empty($data[$i]['blog_name']) ? rawurldecode($data[$i]['blog_name']) : rawurldecode($data[$i]['url']);
  $blog_name = sanitize_data($blog_name);
  $excerpt = MAGIC_QUOTES ? stripslashes(str_replace('`','',strip_tags(rawurldecode($data[$i]['excerpt'])))) :
                                      str_replace('`','',strip_tags(rawurldecode($data[$i]['excerpt'])));
  $url = rawurldecode($data[$i]['url']);
  $title = sanitize_data(rawurldecode($data[$i]['title']));
  $excerpt = autolink($excerpt);
  $date = date('Y/m/d H:i:s', $data[$i]['entry']);
  $bg = ($i%2==1) ? '#eff1f3' : '#fff';
  if(isOwner($name)) $bg = '#f9e5f3';
  $body .= '<tr style="background:'.$bg.';"><td>'.$date.'</td><td class="center"><a href="'.$url.'" title="新しいウィンドウで開きます" onclick="window.open(this.href,\'\');return false;">'.$title.'</a></td><td style="color:#777;">'.my_substr($excerpt,0,15).'</td><td>'.$blog_name.'</td><td><a href="trackback.php?mode=delete&amp;UID='.g_('UID').'&amp;TBID='.$data[$i]['entry'].'" onclick="return my_confirm(\'このトラックバックを\');"><img src="Images/trash.png" alt="Delete" title="削除" /></a></td></tr>'.NL;
 }
 $body .= '</table>'.NL;
 return $DIVISION['body'] .= $header.$body.$back;
}

if(g_('sub')=='category'){
 $body = '
<p class="helper" onclick="toggleHelper(this,1);">　</p><ul class="p2em" style="width: 480px; margin:1em auto; display:'.($helperState?'block':'none').';">
 <li> 記事のタイトルをクリックすると編集モードになります</li>
 <li> コメント数をクリックするとコメント編集モードになります</li>
 <li> 同様にしてトラックバック編集モードに入れます</li>
 <li><kbd>SHIFT</kbd>キーを押しながら、削除のチェックボックスをクリックすると一度に複数選択できます</li>
</ul>
'.$pageNav.'
<div style="margin: 0.7em auto; text-align: center;">
 <p><span style="color:firebrick;">'.$author.'</span>によるカテゴリー ≫ <span style="color:firebrick;">'.str_replace(',', ' ≫ ', $cat).'</span> の記事</p>
 <p>トータルで <strong>'.$total.'</strong> 件のエントリー '.$pitch_select.'件ずつ表示 &#8658; <a href="admin.php?mode=article">すべての記事を表示</a></p>
</div>
<div><form action="admin.php" method="post">
<p class="hidden">
 <input type="hidden" name="mode" value="article" />
 <input type="hidden" name="query" value="'.QUERY.'" />
</p>
<table cellspacing="0" cellpadding="1" style="width: 90%; margin: 1em auto; border: solid 1px #777;">
 <tr style="text-align:center;background:url(Images/grad.png);"><th>タ イ ト ル</th><th>ページ数</th><th>書き手</th><th>カテゴリー</th><th>日　時</th><th>コメント数</th><th title="トラックバック数">TB数</th><th>削除</th></tr>
';

 foreach ($LINES as $i=>$line){
  list($id,$cat,$title,$com,$author,$allowC,$allowP,,$extended) = explode('|', $line);
  $_id = str_replace('d', '', $id);
  if(strpos($title, ',')) list($title,) = explode(',', $title);
  $cno = get_cmt_array($id, TRUE); $cno = (!$allowC && !$cno) ? ' - ' : $cno;
  $tno = get_tb_count($id); $tno = (!$allowP && !$tno) ? ' - ' : $tno;
  $cmt = ($cno> 0) ? '<a href="admin.php?mode=article&amp;sub=comment&amp;UID='.$id.'">'.$cno.'</a>' : $cno;
  $tb = ($tno > 0) ? '<a href="admin.php?mode=article&amp;sub=trackback&amp;UID='.$id.'">'.$tno.'</a>' : $tno;
  $bg = ($i%2==1) ? '#eff1f3' : '#fff';
  if(!empty($extended)){
  $pageNum = explode(',', $extended);
  $pageNum = count($pageNum) + 1; # ページ数ゲット
  } else $pageNum = 1;
  $body .= '<tr style="background:'.$bg.';"><td class="left">　<a href="admin.php?mode=edit&amp;UID='.$id.'" title="'.$title.'">'.my_substr($title,0,15).'</a>'.($id != $_id ? '<sup style="color:crimson">未公開</sup>':'').'</td><td>'.$pageNum.'</td><td>'.((isUserLoggedIn()||g_('sub')=='author')?$author:'<a href="admin.php?mode=article&amp;sub=author&amp;aim='.rawurlencode($author).'">'.$author.'</a>').'</td><td>'.str_replace(',', ' &raquo; ', $cat).'</td><td>'.date("Y/m/d", $_id).'</td><td class="center">'.$cmt.'</td><td class="center">'.$tb.'</td><td class="center"><input type="checkbox" title="削除" name="del[]" value="'.$id.'" /></td></tr>'.NL;
 }
 $body .= '</table>'.NL;
 $body .= '<p id="reset">
  <button type="button" onclick="resetAll();">選択解除</button>
  <button type="submit" onclick="return my_confirm(\'選択した記事を\');">削除の実行</button>
 </p>'.NL.'</form></div>'.NL;
}

if(g_('sub')=='' || g_('sub')=='author'){
 if(!isUserLoggedIn()){
  $link = g_('sub')=='author' ?
   '<li>'.$author.' の記事を表示しています。→[<a href="admin.php?mode=article">すべての記事を表示</a>]</li>' :
   '<li>書き手をクリックすると、その書き手の投稿記事だけを表示します</li>';
 } else $link = '';
 $body = '
<ul class="p2em" style="width: 480px; margin:1em auto 0 auto; display:'.($helperState?'block':'none').';">
 '.$link.'
 <li> 記事のタイトルをクリックすると編集モードになります</li>
 <li> 記事のタイトル横のアイコンをクリックすると新しいウィンドウで記事を表示します</li>
 <li> 同様にカテゴリーでのソートも出来ます</li>
 <li> コメント数をクリックするとコメント編集モードになります</li>
 <li> 同様にしてトラックバック詳細モードになります</li>
</ul><p class="helper" onclick="toggleHelper(this);">　</p>
'.$pageNav.'
<div style="margin: 0.7em auto; text-align: center;">'.(g_('sub') != '' ? $author.'の記事：' : '').'トータルで <strong>'.$total.'</strong> 件のエントリー '.$pitch_select.'件ずつ表示 '.(g_('sub') != '' ? '&#8658;<a href="admin.php?mode=article">すべて表示</a>' : '').'</div>
<div><form action="admin.php" method="post">
<p class="hidden">
 <input type="hidden" name="mode" value="article" />
 <input type="hidden" name="query" value="'.QUERY.'" />
</p>
<table cellspacing="0" cellpadding="1" style="width: 90%; margin: 1em auto; border: solid 1px #777;">
 <tr style="text-align:center;background:url(Images/grad.png);"><th>タ イ ト ル</th><th>ページ数</th><th>書き手</th><th>カテゴリー</th><th>日　時</th><th>コメント数</th><th title="トラックバック数">TB数</th><th>削除</th></tr>
';

 foreach ($LINES as $i=>$line){
  list($id,$cat,$title,$com,$author,$allowC,$allowP,, $extended) = explode('|', $line);
  $_id = str_replace('d', '', $id);
  if(strpos($title, ',')) list($title,) = explode(',', $title);
  $cno = get_cmt_array($id, TRUE); $cno = (!$allowC && !$cno) ? ' - ' : $cno;
  $tno = get_tb_count($id); $tno = (!$allowP && !$tno) ? ' - ' : $tno;
  $cmt = ($cno> 0) ? '<a href="admin.php?mode=article&amp;sub=comment&amp;UID='.$id.'">'.$cno.'</a>' : $cno;
  $tb = ($tno > 0) ? '<a href="admin.php?mode=article&amp;sub=trackback&amp;UID='.$id.'">'.$tno.'</a>' : $tno;
  $bg = ($i%2==1) ? '#eff1f3' : '#fff';
  if(!empty($extended)){
   $pageNum = explode(',', $extended);
   $pageNum = count($pageNum) + 1; # ページ数ゲット
  } else $pageNum = 1;
  $body .= '<tr style="background:'.$bg.';"><td class="left"><a href="admin.php?mode=edit&amp;UID='.$id.'" title="'.$title.'">'.my_substr($title,0,15).'</a>'.($id != $_id ? '<sup style="color:crimson">未公開</sup>':'').' <a href="index.php?UID='.$id.'" title="新しいウィンドウで" onclick="window.open(this.href,\'\');return false;"><img src="Images/new-window.png" width="9" height="9" alt="" /></a></td><td>'.$pageNum.'</td><td>'.((isUserLoggedIn()||g_('sub')=='author')?$author:'<a href="admin.php?mode=article&amp;sub=author&amp;aim='.rawurlencode($author).'">'.$author.'</a>').'</td><td>'.categoryNav_mod($cat).'</td><td>'.date("Y/m/d", $_id).'</td><td class="center">'.$cmt.'</td><td class="center">'.$tb.'</td><td class="center"><input type="checkbox" title="削除" name="del[]" value="'.$id.'" /></td></tr>'.NL;
 }
 $body .= '</table>'.NL;
 $body .= '<p id="reset">
  <button type="button" onclick="resetAll();">選択解除</button>
  <button type="submit" onclick="return my_confirm(\'選択した記事を\');">削除の実行</button>
 </p>'.NL.'</form></div>'.NL;
}
unset($LINES);

return $DIVISION['body'] .= $header.$body;

function categoryNav_mod($cat, $separator='&raquo;'){ # $cat format: category(,subcategory)
 global $CATEGORY_LIST;
 include_once (OD.'category.ini.php');
 foreach ($CATEGORY_LIST as $catlist){
  preg_match('{^'.$cat.'\t(.+?)\|}', $catlist, $ct);
  if(!empty($ct)){ $catlink = $ct[1]; break;}
 }
 $authorlink = g_('sub') == 'author' ? 'author='.rawurlencode(g_('aim')).'&amp;' : '';
 if(!isset($catlink)) $catlink = 'foo';
 if(strpos($cat,',')){
  list($main, $sub) = explode(',', $cat); list($mainlink,) = explode('/', $catlink);
  return '<a title="このカテゴリーを表示" href="admin.php?mode=article&amp;'.$authorlink.'sub=category&amp;aim='.$mainlink.'"> '.$main.'</a> '.$separator.'
   <a title="このカテゴリーを表示" href="admin.php?mode=article&amp;'.$authorlink.'sub=category&amp;aim='.$catlink.'"> '.$sub.'</a>';
 } else return '<a title="このカテゴリーを表示" href="admin.php?mode=article&amp;'.$authorlink.'sub=category&amp;aim='.$catlink.'"> '.$cat.'</a>';
}

?>
